Prometheus Operator

개요

image.png
쿠버네티스 환경에서 프로메테우스를 조금 더 쉽게 관리할 수 있도록 도와주는 오퍼레이터.
프로메테우스에서 활용되는 다양한 설정이나 기능들을 CRD로 만들어서 클러스터적으로 프로메테우스를 관리할 수 있도록 도와준다.

리소스

이 오퍼레이터에는 다양한 CRD가 존재한다.
위에서도 말했듯, 이 CRD들은 대체로 프로메테우스에서 활용되는 기능들을 클러스터 리소스로서도 관리할 수 있도록 만들어진 것들이다.
image.png
크게는 두 가지로 구분을 지을 수 있다.

인스턴스 기반 리소스


실제 프로세스, 소프트웨어 컴포넌트를 나타내는 리소스가 있다.
대표적으로 위의 것들이 여기에 해당한다.

이 리소스들을 직접적으로 수정하면 실제 배포된 컴포넌트들이 해당 설정을 반영하여 자동으로 리로딩된다.
이를 위해 config reloader라는 사이드카 형식의 컨테이너가 같이 구축돼있는 경우가 많다.

설정 기반 리소스


프로메테우스에서 설정해야 하는 요소들 역시 각각 하나의 리소스로서 관리할 수 있다.
대표적으로 다음의 요소들이 있다.

kind: Service
apiVersion: v1
metadata:
  name: example-app
  labels:
    app: example-app
spec:
  selector:
    app: example-app
  ports:
  - name: web
    port: 8080
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: example-app
  labels:
    team: frontend
spec:
  selector:
    matchLabels:
      app: example-app
  endpoints:
  - port: web

가령 ServiceMonitor의 경우 이런 식으로 작성한다.
이게 무엇이냐, 서비스 모니터 리소스는 어떤 서비스를 라벨 기반으로 추적한다.
위의 서비스는 자신의 라벨(라벨 셀렉터 부분 말고, 서비스 메타데이터의 라벨이란 것에 유념)로 app: example-app을 가지고 있다.
서비스 모니터는 이 라벨을 추적하여 자신이 메트릭을 수집할 대상이 되는 서비스를 찾아낸다.
이후에 이 서비스가 가지는 엔드포인트슬라이스을 추적하여 실제 트래픽을 받는 파드를 알아내고, 그 파드로부터 메트릭을 긁어온다!
프로메테우스의 서비스 디스커버리 설정에 이렇게 찾아진 파드들이 자동으로 등록되어, 프로메테우스를 통해 해당 파드들이 노출하는 메트릭을 자연스럽게 긁어올 수 있게 된다.

그림으로 보기 편하게 예를 들면 이런 식이다.[1]
서비스 모니터 리소스는 서비스 라벨을 보는 방식이니 서비스의 라벨 셀렉터만 설정한다던가 하는 실수에 유의하자.

관련 문서

이름 noteType created
Prometheus Operator knowledge 2025-03-30

참고


  1. https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/img/custom-metrics-elements.png ↩︎